package com.lin.subject.application.controller;

import com.alibaba.fastjson.JSON;
import com.lin.subject.application.convert.SubjectLabelDTOConverter;
import com.lin.subject.application.dto.SubjectLabelDTO;
import com.lin.subject.commom.entity.Result;
import com.lin.subject.domain.entity.SubjectLabelBO;
import com.lin.subject.domain.service.SubjectLabelDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/label")
@Slf4j
public class SubjectLabelController {
    @Resource
    private SubjectLabelDomainService subjectLabelDomainService;

    /**
     * 新增标签
     */
    @PostMapping("/add")
    public Result<String> add(@RequestBody SubjectLabelDTO subjectCategoryDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info(JSON.toJSONString("SubjectLabelController.add:" + subjectCategoryDTO));
            }
            SubjectLabelBO subjectLabelBo = SubjectLabelDTOConverter.INSTANCE.convertDtoToCategoryBO(subjectCategoryDTO);
            subjectLabelDomainService.add(subjectLabelBo);
            return Result.ok(true);
        } catch (Exception e) {
            log.error("SubjectCategoryController.add.error:{}", e.getMessage(), e);
            return Result.fail(e.getMessage());
        }
    }

    /**
     * 新增标签
     */
    @PostMapping("/update")
    public Result<Boolean> update(@RequestBody SubjectLabelDTO subjectLabelDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info(JSON.toJSONString("SubjectLabelController.add:" + subjectLabelDTO));
            }
            SubjectLabelBO subjectLabelBo = SubjectLabelDTOConverter.INSTANCE.convertDtoToCategoryBO(subjectLabelDTO);
            subjectLabelDomainService.update(subjectLabelBo);
            return Result.ok(true);
        } catch (Exception e) {
            log.error("SubjectCategoryController.add.error:{}", e.getMessage(), e);
            return Result.fail(e.getMessage());
        }
    }

    /**
     * 新增标签
     */
    @PostMapping("/delete")
    public Result<Boolean> delete(@RequestBody SubjectLabelDTO subjectCategoryDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info(JSON.toJSONString("SubjectLabelController.add:" + subjectCategoryDTO));
            }
            SubjectLabelBO subjectLabelBo = SubjectLabelDTOConverter.INSTANCE.convertDtoToCategoryBO(subjectCategoryDTO);
            subjectLabelDomainService.delete(subjectLabelBo);
            return Result.ok(true);
        } catch (Exception e) {
            log.error("SubjectCategoryController.add.error:{}", e.getMessage(), e);
            return Result.fail(e.getMessage());
        }
    }

    /**
     * 查询分类下标签所有表钱
     */
    @PostMapping("/queryLabelByCategoryId")
    public Result<List<SubjectLabelDTO>> queryLabelByCategoryId(@RequestBody SubjectLabelDTO subjectLabelDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info(JSON.toJSONString("SubjectLabelController.add:" + subjectLabelDTO));
            }
            SubjectLabelBO subjectLabelBo = SubjectLabelDTOConverter.INSTANCE.convertDtoToCategoryBO(subjectLabelDTO);

            List<SubjectLabelBO> list = subjectLabelDomainService.queryLabelByCategoryId(subjectLabelBo);
            List<SubjectLabelDTO> subjectCategoryDTOS = SubjectLabelDTOConverter.INSTANCE.convertListBoToDto(list);

            return Result.ok(subjectCategoryDTOS);
        } catch (Exception e) {
            log.error("SubjectCategoryController.queryLabelByCategoryId.error:{}", e.getMessage(), e);
            return Result.fail(e.getMessage());
        }
    }

    /**
     * 查询分类下 所有含有题目的标签
     */
    @PostMapping("/queryAnswerLabelByCategoryId")
    public Result<List<SubjectLabelDTO>> queryAnswerLabelByCategoryId(@RequestBody SubjectLabelDTO subjectLabelDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info(JSON.toJSONString("queryAnswerLabelByCategoryId.query:" + subjectLabelDTO));
            }
            SubjectLabelBO subjectLabelBo = SubjectLabelDTOConverter.INSTANCE.convertDtoToCategoryBO(subjectLabelDTO);

            List<SubjectLabelBO> list = subjectLabelDomainService.queryAnswerLabelByCategoryId(subjectLabelBo);
            List<SubjectLabelDTO> subjectCategoryDTOS = SubjectLabelDTOConverter.INSTANCE.convertListBoToDto(list);

            return Result.ok(subjectCategoryDTOS);
        } catch (Exception e) {
            log.error("SubjectCategoryController.query.error:{}", e.getMessage(), e);
            return Result.fail(e.getMessage());
        }
    }

    /**
     * 查询分类下 所有含有题目的标签
     */
    @PostMapping("/queryLabel")
    public Result<List<SubjectLabelDTO>> queryLabel(@RequestBody SubjectLabelDTO subjectLabelDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info(JSON.toJSONString("queryAnswerLabelByCategoryId.query:" + subjectLabelDTO));
            }
            SubjectLabelBO subjectLabelBo = SubjectLabelDTOConverter.INSTANCE.convertDtoToCategoryBO(subjectLabelDTO);

            List<SubjectLabelBO> list = subjectLabelDomainService.queryLabel(subjectLabelBo);
            List<SubjectLabelDTO> subjectCategoryDTOS = SubjectLabelDTOConverter.INSTANCE.convertListBoToDto(list);

            return Result.ok(subjectCategoryDTOS);
        } catch (Exception e) {
            log.error("SubjectCategoryController.query.error:{}", e.getMessage(), e);
            return Result.fail(e.getMessage());
        }
    }
}
